راهنمای جامع ساخت اعلانهای toast دسترسپذیر. اصول WCAG، نقشهای ARIA و بهترین شیوههای UX برای ایجاد پیامهای موقت فراگیر برای همه کاربران.
اعلانهای Toast: ساخت پیامهای موقت دسترسپذیر و کاربرپسند
در دنیای پرشتاب رابطهای دیجیتال، ارتباط بین یک سیستم و کاربر آن از اهمیت بالایی برخوردار است. ما برای درک نتایج اقدامات خود به نشانههای بصری تکیه میکنیم. یکی از رایجترین الگوهای رابط کاربری برای این بازخورد، اعلان 'toast' است—یک پاپآپ کوچک و غیرمداخلهگر که اطلاعات موقتی را ارائه میدهد. چه تأیید «پیام ارسال شد»، اطلاعرسانی «فایل بارگذاری شد» یا هشدار «اتصال شما قطع شده است»، toastها ابزارهای بیسروصدای بازخورد کاربر هستند.
با این حال، ماهیت موقتی و ظریف آنها یک شمشیر دولبه است. در حالی که برای برخی کاربران کمترین مزاحمت را ایجاد میکند، همین ویژگی اغلب آنها را برای دیگران، بهویژه کسانی که به فناوریهای کمکی مانند صفحهخوانها تکیه میکنند، کاملاً غیرقابل دسترس میسازد. یک اعلان toast غیرقابل دسترس فقط یک ناراحتی جزئی نیست؛ بلکه یک شکست خاموش است که کاربران را نامطمئن و ناامید میکند. کاربری که نمیتواند پیام «تنظیمات ذخیره شد» را درک کند، ممکن است دوباره سعی در ذخیره کردن آنها داشته باشد یا به سادگی برنامه را ترک کند در حالی که از موفقیتآمیز بودن تغییرات خود مطمئن نیست.
این راهنمای جامع برای توسعهدهندگان، طراحان UX/UI و مدیران محصولی است که میخواهند محصولات دیجیتال واقعاً فراگیر بسازند. ما چالشهای ذاتی دسترسپذیری اعلانهای toast را بررسی خواهیم کرد، به عمق راهحلهای فنی با استفاده از ARIA (Accessible Rich Internet Applications) خواهیم پرداخت و بهترین شیوههای طراحی را که به نفع همه است، تشریح خواهیم کرد. بیایید یاد بگیریم چگونه این پیامهای موقت را به بخشی دائمی از یک تجربه کاربری دسترسپذیر تبدیل کنیم.
چالش دسترسپذیری در اعلانهای Toast
برای درک راهحل، ابتدا باید مشکل را عمیقاً درک کنیم. اعلانهای toast سنتی اغلب به دلیل اصول طراحی اصلی خود در چندین جنبه از دسترسپذیری شکست میخورند.
۱. آنها زودگذر و مبتنی بر زمان هستند
ویژگی بارز یک toast، وجود زودگذر آن است. برای چند ثانیه ظاهر میشود و سپس به آرامی محو میشود. برای یک کاربر بینا، این زمان معمولاً برای خواندن پیام کافی است. با این حال، برای کاربر یک صفحهخوان، این یک مانع قابل توجه است. یک صفحهخوان محتوا را به صورت خطی اعلام میکند. اگر کاربر روی یک فیلد فرم متمرکز باشد یا به محتوای دیگری که در حال خوانده شدن است گوش دهد، toast ممکن است قبل از اینکه صفحهخوان به آن برسد، ظاهر و ناپدید شود. این یک شکاف اطلاعاتی ایجاد میکند و یک اصل اساسی دسترسپذیری را نقض میکند: اطلاعات باید قابل درک باشند.
۲. آنها فوکوس دریافت نمیکنند
Toastها طوری طراحی شدهاند که مزاحم نباشند. آنها عمداً فوکوس را از کار فعلی کاربر نمیگیرند. یک کاربر بینا میتواند در حین ظاهر شدن پیام «پیشنویس ذخیره شد» به تایپ کردن در یک فیلد متنی ادامه دهد. اما برای کاربران فقط-کیبورد و کاربران صفحهخوان، فوکوس روش اصلی ناوبری و تعامل آنهاست. از آنجایی که toast هرگز در ترتیب فوکوس قرار نمیگیرد، برای یک مسیر ناوبری خطی نامرئی است. کاربر باید به صورت دستی کل صفحه را برای پیامی که حتی از وجود آن خبر ندارد، جستجو کند.
۳. آنها خارج از زمینه ظاهر میشوند
Toastها اغلب در ناحیه جداگانهای از صفحه، مانند گوشه بالا-راست یا پایین-چپ، دور از عنصری که آنها را فعال کرده (مثلاً دکمه 'ذخیره' در وسط یک فرم) ظاهر میشوند. این جدایی مکانی به راحتی توسط بینایی پوشش داده میشود اما جریان منطقی را برای صفحهخوانها میشکند. اعلام پیام، اگر اصلاً اتفاق بیفتد، میتواند تصادفی و بیارتباط با آخرین اقدام کاربر به نظر برسد و باعث سردرگمی شود.
ارتباط با WCAG: چهار ستون اصلی دسترسپذیری
دستورالعملهای دسترسپذیری محتوای وب (WCAG) بر چهار اصل بنا شدهاند. Toastهای غیرقابل دسترس چندین مورد از آنها را نقض میکنند.
- قابل درک (Perceivable): اگر کاربری با اختلال بینایی نتواند اعلان را درک کند زیرا صفحهخوانش آن را اعلام نمیکند، یا اگر کاربری با ناتوانی شناختی زمان کافی برای خواندن آن را نداشته باشد، اطلاعات قابل درک نیست. این مربوط به معیار موفقیت WCAG 2.2.1 Timing Adjustable است که ایجاب میکند به کاربران زمان کافی برای خواندن و استفاده از محتوا داده شود.
- عملیاتی (Operable): اگر یک toast شامل یک عمل، مانند دکمه «بستن» باشد، باید قابل فوکوس و قابل استفاده از طریق کیبورد باشد. حتی اگر فقط اطلاعاتی باشد، کاربر باید بر آن کنترل داشته باشد، مانند توانایی بستن دستی آن.
- قابل فهم (Understandable): محتوای toast باید واضح و مختصر باشد. اگر یک صفحهخوان پیام را خارج از زمینه اعلام کند، ممکن است معنای آن قابل فهم نباشد. این همچنین به WCAG 4.1.2 Name, Role, Value مربوط میشود که ایجاب میکند هدف یک جزء رابط کاربری به صورت برنامهنویسی قابل تعیین باشد.
- استوار (Robust): اعلان باید با استفاده از فناوریهای استاندارد وب به گونهای پیادهسازی شود که با عاملهای کاربری فعلی و آینده، از جمله فناوریهای کمکی، سازگار باشد. یک toast سفارشی که استانداردهای ARIA را نادیده میگیرد، استوار نیست.
راهکار فنی: مناطق زنده ARIA (ARIA Live Regions) به کمک میآیند
کلید دسترسپذیر کردن اعلانهای toast در بخش قدرتمندی از مشخصات ARIA نهفته است: مناطق زنده (live regions). یک منطقه زنده ARIA عنصری در صفحه است که شما آن را به عنوان 'زنده' مشخص میکنید. این به فناوریهای کمکی میگوید که آن عنصر را برای هرگونه تغییر در محتوای آن نظارت کرده و آن تغییرات را بدون جابجایی فوکوس کاربر به او اعلام کنند.
با قرار دادن اعلانهای toast خود در یک منطقه زنده، میتوانیم اطمینان حاصل کنیم که محتوای آنها به محض ظاهر شدن توسط صفحهخوانها اعلام میشود، صرف نظر از اینکه فوکوس کاربر کجاست.
ویژگیهای کلیدی ARIA برای Toastها
سه ویژگی اصلی با هم کار میکنند تا یک منطقه زنده مؤثر برای toastها ایجاد کنند:
۱. ویژگی role
ویژگی `role` هدف معنایی عنصر را تعریف میکند. برای مناطق زنده، سه نقش اصلی برای در نظر گرفتن وجود دارد:
role="status"
: این رایجترین و مناسبترین نقش برای اعلانهای toast است. برای پیامهای اطلاعاتی که مهم اما فوری نیستند استفاده میشود. این نقش بهaria-live="polite"
نگاشت میشود، به این معنی که صفحهخوان قبل از اعلام، منتظر یک لحظه عدم فعالیت (مانند پایان یک جمله) میماند تا اطمینان حاصل شود که کاربر در حین انجام کار قطع نمیشود. از این برای تأییدهایی مانند «پروفایل بهروز شد»، «مورد به سبد خرید اضافه شد» یا «پیام ارسال شد» استفاده کنید.role="alert"
: این نقش برای اطلاعات فوری و حساس به زمان که نیاز به توجه فوری کاربر دارد، رزرو شده است. این بهaria-live="assertive"
نگاشت میشود که صفحهخوان را فوراً برای ارائه پیام قطع میکند. از این با احتیاط شدید استفاده کنید، زیرا میتواند بسیار مختلکننده باشد. برای پیامهای خطا مانند «جلسه شما در حال انقضا است» یا هشدارهای حیاتی مانند «اتصال قطع شد» مناسب است. استفاده بیش از حد ازrole="alert"
مانند فریاد زدن بر سر کاربران است.role="log"
: این یک نقش کمتر رایج است که برای ایجاد یک گزارش از اطلاعات که در آن پیامهای جدید به انتها اضافه میشوند، مانند گزارشهای چت یا کنسولهای خطا، استفاده میشود. به طور کلی بهترین گزینه برای اعلانهای toast معمولی نیست.
۲. ویژگی aria-live
در حالی که ویژگی `role` اغلب رفتار خاصی از `aria-live` را القا میکند، میتوانید آن را برای کنترل بیشتر به صراحت تنظیم کنید. این به صفحهخوان میگوید *چگونه* تغییر را اعلام کند.
aria-live="polite"
: صفحهخوان تغییر را زمانی که کاربر بیکار است اعلام میکند. این پیشفرض برایrole="status"
و تنظیم ترجیحی برای اکثر toastها است.aria-live="assertive"
: صفحهخوان هر کاری را که انجام میدهد قطع کرده و تغییر را فوراً اعلام میکند. این پیشفرض برایrole="alert"
است.aria-live="off"
: صفحهخوان تغییرات را اعلام نخواهد کرد. این پیشفرض برای اکثر عناصر است.
۳. ویژگی aria-atomic
این ویژگی به صفحهخوان میگوید که آیا کل محتوای منطقه زنده را اعلام کند یا فقط بخشهایی که تغییر کردهاند.
aria-atomic="true"
: هنگامی که هر بخشی از محتوا در منطقه زنده تغییر میکند، صفحهخوان کل محتوای عنصر را میخواند. این تقریباً همیشه همان چیزی است که برای یک اعلان toast میخواهید، تا اطمینان حاصل شود که پیام کامل در زمینه خوانده میشود.aria-atomic="false"
: صفحهخوان فقط گرهای را که اضافه یا تغییر کرده است اعلام میکند. این میتواند منجر به اعلامهای تکهتکه و گیجکننده برای toastها شود.
جمعبندی همه چیز: نمونه کدها
بیایید ببینیم چگونه این را پیادهسازی کنیم. یک روش خوب این است که یک عنصر کانتینر اختصاصی برای toast در هنگام بارگذاری صفحه در DOM وجود داشته باشد. سپس شما به صورت پویا پیامهای toast جداگانه را درون این کانتینر تزریق و حذف میکنید.
ساختار HTML
این کانتینر را در انتهای تگ <body>
خود قرار دهید. موقعیت بصری آن با CSS تعیین میشود، اما مکان آن در DOM برای اعلامهای صفحهخوان اهمیتی ندارد.
<!-- یک منطقه زنده مودبانه برای اعلانهای استاندارد -->
<div id="toast-container-polite"
role="status"
aria-live="polite"
aria-atomic="true">
<!-- Toastها به صورت پویا در اینجا درج خواهند شد -->
</div>
<!-- یک منطقه زنده قاطع برای هشدارهای فوری -->
<div id="toast-container-assertive"
role="alert"
aria-live="assertive"
aria-atomic="true">
<!-- Toastهای فوری به صورت پویا در اینجا درج خواهند شد -->
</div>
جاوا اسکریپت برای یک اعلان مودبانه
در اینجا یک تابع جاوا اسکریپت خالص برای نمایش یک پیام toast مودبانه آورده شده است. این تابع یک عنصر toast ایجاد میکند، آن را به کانتینر مودبانه اضافه میکند و یک تایماوت برای حذف آن تنظیم میکند.
function showPoliteToast(message, duration = 5000) {
const container = document.getElementById('toast-container-polite');
// Create the toast element
const toast = document.createElement('div');
toast.className = 'toast';
toast.textContent = message;
// Add the toast to the container
container.appendChild(toast);
// Set a timeout to remove the toast
setTimeout(() => {
container.removeChild(toast);
}, duration);
}
// مثال استفاده:
document.getElementById('save-button').addEventListener('click', () => {
// ... منطق ذخیرهسازی ...
showPoliteToast('Your settings have been saved successfully.');
});
هنگامی که این کد اجرا میشود، div
با role="status"
بهروز میشود. یک صفحهخوان که صفحه را نظارت میکند این تغییر را تشخیص داده و بدون ایجاد وقفه در گردش کار کاربر، اعلام میکند: «تنظیمات شما با موفقیت ذخیره شد».
بهترین شیوههای طراحی و UX برای Toastهای واقعاً فراگیر
پیادهسازی فنی با ARIA اساس کار است، اما تجربه کاربری عالی نیازمند طراحی متفکرانه است. یک toast دسترسپذیر، برای همه یک toast قابل استفادهتر نیز هست.
۱. زمانبندی همه چیز است: به کاربران کنترل بدهید
یک toast ۳ ثانیهای ممکن است برای برخی خوب باشد، اما برای کاربرانی با دید کم که به زمان بیشتری برای خواندن نیاز دارند، یا برای کاربرانی با ناتوانیهای شناختی که به زمان بیشتری برای پردازش اطلاعات نیاز دارند، بسیار کوتاه است.
- مدت زمان پیشفرض طولانیتر: حداقل مدت زمان ۵-۷ ثانیه را هدف قرار دهید. این یک پنجره زمانی راحتتر برای خواندن برای طیف وسیعتری از کاربران فراهم میکند.
- شامل کردن دکمه 'بستن': همیشه یک دکمه واضح و قابل دسترس با کیبورد برای بستن دستی toast فراهم کنید. این به کاربران کنترل نهایی را میدهد و از ناپدید شدن پیام قبل از اتمام کارشان با آن جلوگیری میکند. این دکمه باید یک برچسب دسترسپذیر داشته باشد، مانند
<button aria-label="بستن اعلان">X</button>
. - توقف در حالت Hover/Focus: تایمر بسته شدن باید زمانی که کاربر ماوس خود را روی toast نگه میدارد یا با کیبورد روی آن فوکوس میکند، متوقف شود. این یک جنبه حیاتی از معیار Timing Adjustable در WCAG است.
۲. وضوح بصری و جایگذاری
اینکه یک toast چگونه به نظر میرسد و کجا ظاهر میشود به طور قابل توجهی بر کارایی آن تأثیر میگذارد.
- کنتراست بالا: اطمینان حاصل کنید که متن و پسزمینه toast نسبت کنتراست رنگ کافی برای مطابقت با استانداردهای WCAG AA (۴.۵:۱ برای متن معمولی) را دارند. از ابزارها برای بررسی ترکیب رنگهای خود استفاده کنید.
- آیکونهای واضح: از آیکونهای قابل فهم جهانی (مانند یک تیک برای موفقیت، یک 'i' برای اطلاعات، یا یک علامت تعجب برای هشدار) در کنار متن استفاده کنید. این آیکونها یک نشانه بصری سریع ارائه میدهند، اما تنها به آنها تکیه نکنید. همیشه متن را نیز شامل کنید.
- موقعیتیابی ثابت: یک مکان ثابت برای toastهای خود انتخاب کنید (مثلاً، بالا-راست) و در سراسر برنامه خود به آن پایبند باشید. این برای کاربران قابلیت پیشبینی ایجاد میکند. از قرار دادن toastها در جایی که ممکن است عناصر مهم رابط کاربری را بپوشانند، خودداری کنید.
۳. میکروکپی واضح و مختصر بنویسید
خود پیام هسته اصلی اعلان است. آن را ارزشمند کنید.
- مستقیم باشید: مستقیماً به اصل مطلب بروید. به جای «عملیات با موفقیت انجام شد»، از «پروفایل بهروز شد» استفاده کنید.
- از اصطلاحات تخصصی خودداری کنید: از زبان ساده و روانی استفاده کنید که مخاطبان جهانی بتوانند به راحتی آن را بفهمند. این امر به ویژه برای برنامههای بینالمللی که محتوا ترجمه خواهد شد، مهم است. اصطلاحات پیچیده یا واژگان فنی ممکن است در ترجمه از بین بروند.
- لحن انساندوستانه: با لحنی مفید و محاورهای بنویسید. پیام باید طوری به نظر برسد که از طرف یک دستیار مفید میآید، نه یک ماشین سرد.
۴. از Toastها برای اطلاعات حیاتی استفاده نکنید
این قانون طلایی است. اگر کاربر *باید* پیامی را ببیند یا با آن تعامل کند، از toast استفاده نکنید. Toastها برای بازخوردهای تکمیلی و غیرحیاتی هستند. برای خطاهای حیاتی، پیامهای اعتبارسنجی که نیاز به اقدام کاربر دارند، یا تأییدیهها برای اقدامات تخریبی (مانند حذف یک فایل)، از یک الگوی قویتر مانند یک دیالوگ مودال یا یک هشدار درونخطی که فوکوس را دریافت میکند، استفاده کنید.
آزمایش اعلانهای Toast دسترسپذیر شما
شما نمیتوانید مطمئن باشید که پیادهسازی شما دسترسپذیر است مگر اینکه آن را با ابزارهایی که کاربران شما واقعاً استفاده میکنند، آزمایش کنید. آزمایش دستی برای اجزای پویا مانند toastها غیرقابل مذاکره است.
۱. آزمایش با صفحهخوان
با رایجترین صفحهخوانها آشنا شوید: NVDA (رایگان، برای ویندوز)، JAWS (پولی، برای ویندوز)، و VoiceOver (داخلی، برای macOS و iOS). یک صفحهخوان را روشن کنید و اقداماتی را که toastهای شما را فعال میکنند، انجام دهید.
از خود بپرسید:
- آیا پیام اعلام شد؟ این ابتداییترین آزمایش است.
- آیا به درستی اعلام شد؟ آیا پیام کامل خوانده شد؟
- آیا زمانبندی مناسب بود؟ برای یک toast مودبانه، آیا منتظر یک مکث طبیعی ماند؟ برای یک هشدار قاطع، آیا فوراً قطع کرد؟
- آیا تجربه مختلکننده بود؟ آیا استفاده از `role="alert"` توجیهپذیر است یا فقط آزاردهنده است؟
۲. آزمایش فقط با کیبورد
ماوس خود را از برق بکشید و فقط با استفاده از کیبورد در سایت خود حرکت کنید (Tab، Shift+Tab، Enter، Spacebar).
- اگر toast شما دکمه «بستن» یا هر عنصر تعاملی دیگری دارد، آیا میتوانید با استفاده از کلید Tab به آن بروید؟
- آیا میتوانید دکمه را با استفاده از Enter یا Spacebar فعال کنید؟
- آیا پس از بسته شدن toast، فوکوس به یک مکان منطقی در برنامه بازمیگردد؟
۳. بررسیهای بصری و کاربردپذیری
- کنتراست رنگ را با یک افزونه مرورگر یا ابزار آنلاین بررسی کنید.
- سعی کنید اندازه پنجره مرورگر خود را تغییر دهید یا در دستگاههای مختلف مشاهده کنید. آیا toast هنوز در مکانی معقول و بدون پوشاندن محتوای دیگر ظاهر میشود؟
- از کسی که با برنامه آشنا نیست بخواهید از آن استفاده کند. آیا آنها متوجه میشوند که اعلانهای toast به چه معنا هستند؟
نتیجهگیری: ساختن یک وب فراگیرتر، یک اعلان در هر زمان
اعلانهای toast بخش کوچک اما مهمی از تجربه کاربری هستند. سالهاست که آنها یک نقطه کور رایج در دسترسپذیری وب بودهاند و تجربهای ناامیدکننده برای کاربران فناوریهای کمکی ایجاد کردهاند. اما لازم نیست اینطور باشد.
با بهرهگیری از قدرت مناطق زنده ARIA و پایبندی به اصول طراحی متفکرانه، میتوانیم این پیامهای زودگذر را از موانع به پلها تبدیل کنیم. یک toast دسترسپذیر فقط یک چکباکس فنی نیست؛ بلکه تعهدی به ارتباط شفاف با *همه* کاربران است. این اطمینان میدهد که همه، صرف نظر از تواناییشان، بازخورد حیاتی یکسانی دریافت میکنند و میتوانند با اطمینان و کارایی از برنامههای ما استفاده کنند.
بیایید اعلانهای دسترسپذیر را به استاندارد صنعت تبدیل کنیم. با گنجاندن این شیوهها در سیستمهای طراحی و گردش کار توسعه خود، میتوانیم یک وب فراگیرتر، استوارتر و کاربرپسندتر برای یک مخاطب واقعاً جهانی بسازیم.